﻿package com.firewolf.codecounter;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

/**
 * 统计java文件中所有行、空行、注释、除去注释后等的行数
 * 
 * @author Administrator
 *
 */
public class CountOneJavaCodeLineNumber {
	private int empty = 0; // 空行数

	private int all = 0; // 所有行数

	private int oneLineComment;// 单行注释

	private int multiLineComment;// 多行注释

	private int realCount;// 去掉空行和注释后的代码行数

	/**
	 * @param file 需要被统计的类
	 */
	public CountOneJavaCodeLineNumber(File file) {
		count(file);
	}

	public void count(File file) {
		BufferedReader br = null;
		try {
			String str = null;
			br = new BufferedReader(new FileReader(file));
			while ((str = br.readLine()) != null) {
				all++;
				str = str.trim();
				if ("".equals(str.trim())) {
					empty++;
				} else if (str.contains("//")) {
					oneLineComment++;
					if(!str.startsWith("//"))
						realCount++;
				} else if (str.contains("/*")) {
					if (!str.startsWith("/*"))
						realCount++;
					while (str.contains("*/")) {
						multiLineComment++;
						str = br.readLine();
					}
					if (!str.endsWith("*/"))
						realCount++;
				} else {
					realCount++;
				}
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (br != null)
					br.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	/**
	 * 获取空行数
	 * @return
	 */
	public int getEmpty() {
		return empty;
	}

	/**
	 * 获取所有代码行数
	 * @return
	 */
	public int getAll() {
		return all;
	}

	/**
	 * 单行注释行数
	 * @return
	 */
	public int getOneLineComment() {
		return oneLineComment;
	}

	/**
	 * 多行注释行数
	 * @return
	 */
	public int getMultiLineComment() {
		return multiLineComment;
	}

	/**
	 * 真正的代码行数
	 * @return
	 */
	public int getRealCount() {
		return realCount;
	}
}
